package com.hucc.redisjava.model;

/**
 * 字典到负载因子计算公式是 load_factor = ht[0].used/ht[0].size，当负载因子大于等于1时，发生扩容，当小于等于0.1时，发生缩容
 * 如果正在执行BGSAVE或BGREWRITEAOF命令时，负载因子大于等于5时才会扩容，因为会查询子进程，共享住进程内存，尽量避免扩容
 */
public class Dict<K, V> {
    /**
     * hash表存在2个，是用于rehash扩容对时候使用
     */
    Dictht<K, V>[] ht = new Dictht[2];

    /**
     * rehash时记录进度，未进行rehash时值为-1
     */
    int rehashIndex = -1;

    private static class Dictht<K, V> {
        DictEntry<K, V>[] table;
        /**
         * table大小，2到n方
         */
        int size;
        /**
         * size-1
         */
        int sizemask;
        /**
         * 存放对节点数量
         */
        int used;
    }

    private static class DictEntry<K,V> {
        K key;
        V value;
        DictEntry<K, V> next;
    }
}
